/*************************************************************************
	> File Name: lcd_opt.c
	> function: 语音听写(iFly Auto Transform)技术能够实时地将语音转换成对应的文字。
	> Author:卢孙远(Simon)
	> company: GDOU
	> Mail: lsy476941913@live.com 
	> Created Time: 2017年03月28日 星期二 12时33分36秒
 ************************************************************************/
/********************* 显示函数列表 *******************/
#include "lcd_opt.h"


/*
 *	>function:打开framebuffer设备，并将fb设备映射到内存空间，并且返回该内存空间的指针。
 */
char *init_lcd(void)
{
	int lcd = Open("/dev/fb0", O_RDWR);//打开framebuffer设备
	if (-1 == lcd) {
		perror("open() failed");
		exit(EXIT_FAILURE);
	}

	// 获取LCD设备的当前参数
	struct fb_var_screeninfo vinfo;
	ioctl(lcd, FBIOGET_VSCREENINFO, &vinfo);

	// 根据当前LCD设备参数申请适当大小的FRAMEBUFFR
	unsigned long bpp = vinfo.bits_per_pixel; //每一像素多少bits
	char *fb_mem = mmap(NULL, vinfo.xres * vinfo.yres * bpp / 8,
		PROT_READ | PROT_WRITE, MAP_SHARED, lcd, 0);
	if (fb_mem == MAP_FAILED) {
		perror("mmap() failed");
		exit(EXIT_FAILURE);
	}

	return fb_mem;
}

int get_lcdinfo(int fd)
{
//	struct fb_var_screeninfo vinfo;
//	struct fb_fix_screeninfo finfo;
//	long int screensize = 0;
//
//	//struct fb_bitfield red;
//	//struct fb_bitfield green;
//	//struct fb_bitfield blue;
//
//	if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)) {
//		printf("Error：reading FSCREENINFO.\n");
//		return -1;
//	}
//
//	if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)) {
//		printf("Error: reading VSCREENINFO.\n");
//		return -1;
//	}
//
//	int xres = vinfo.xres;
//	int yres = vinfo.yres;
//	int bits_per_pixel = vinfo.bits_per_pixel;
//
//	//计算屏幕的总大小（字节）
//	screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
	
	
	return 0;
}
